# js 解析
"""
参数分析：
    不变的参数：
        from: AUTO
        to: AUTO
        smartresult: dict
        client: fanyideskweb
        bv: b286f0a34340b928819a6f64492585e8
        doctype: json
        version: 2.1
        keyfrom: fanyi.web
        action: FY_BY_REALTlME

    变化的参数：
        i: 要翻译的内容
        e: 输入的要翻译的内容.
        ts: 1590736092496　时间戳.
        salt: 15907360924961　时间戳后加上一位随机的 0-9 的整数.
        bv: 将 User-Agent 经过 md5 加密之后的密文
        sign：898fbe85dd5c836ad43f00cbc5a94bdc 将 "fanyideskweb" + e + i + "Nw(nmmbP%A-r6U3EUn]Aj"经过 md5 加密之后的密文
"""
# hashlib模块提供了很多加密的算法,md5算法加密数据
import hashlib
import random
import time

import requests


class YouDaoSpider(object):

    def __init__(self, word):
        # 进行翻译的url地址
        self.url = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36",
            "Cookie": "OUTFOX_SEARCH_USER_ID=2004598202@10.108.160.19; JSESSIONID=aaaI4kXrPNu8RaSc3pFjx; OUTFOX_SEARCH_USER_ID_NCOO=111942816.21549504; ___rl__test__cookies=1590736092492",
            # Referer 页面跳转处
            "Referer": "http://fanyi.youdao.com/"
        }
        self.formdata = {}
        self.word = word

    def generate_formdata(self):
        """
            ts: r = "" + (new Date).getTime()
            bv: t
            salt: i =  r + parseInt(10 * Math.random(), 10);
            sign: n.md5("fanyideskweb" + e + i + "Nw(nmmbP%A-r6U3EUn]Aj")
        :return:
        """
        # 获取当前的时间戳
        ts = str(int(time.time() * 1000))
        # print(ts)
        salt = ts + str(random.randint(0, 9))

        temp_str = "fanyideskweb" + self.word + salt + "Nw(nmmbP%A-r6U3EUn]Aj"
        # 创建md5对象，md5不能反解，但是加密是固定的，就是关系是一一对应，所以有缺陷，可以比对撞出来
        md5 = hashlib.md5()
        # 调用update方法  接收的数据就是　要加密的内容的　bytes类型
        md5.update(temp_str.encode())
        # 拿到加密字符串
        sign = md5.hexdigest()

        self.formdata = {
            "i": self.word,
            "from": "AUTO",
            "to": "AUTO",
            "smartresult": "dict",
            "client": "fanyideskweb",
            "salt": salt,
            "sign": sign,
            "ts": ts,
            "bv": "b286f0a34340b928819a6f64492585e8",
            "doctype": "json",
            "version": "2.1",
            "keyfrom": "fanyi.web",
            "action": "FY_BY_REALTlME"
        }

    def send_request(self):
        response = requests.post(self.url, headers=self.headers, data=self.formdata)
        print(response)
        return response.json()

    def parse_data(self, data):
        """
        解析数据的方法
        :param data: 响应的数据
        :return:
        """
        result = data["translateResult"][0][0]["tgt"]
        print(f"{self.word} 的翻译结果是：{result}")

    def run(self):
        # 生成 formdata(请求体数据)
        self.generate_formdata()
        # 发送请求 获取响应
        data = self.send_request()
        # 解析数据　打印翻译的结果
        self.parse_data(data)


if __name__ == '__main__':
    data = input("请输入需要翻译的数据：")
    youdao = YouDaoSpider(data)
    youdao.run()
